// package main

// func main() {
// 	var studentscore map[string]int
// 	studentscore["lisi"] = 80
// 	println(studentscore)
// }

// make和new的主要区别

// 适用类型不同
// make: 仅用于创建切片(slice)、映射(map)和通道(channel)
// new: 可用于任何类型

// 返回值不同
// make: 返回初始化后的引用类型的值（返回已初始化的实例本身，可以直接使用）
// new: 返回指向零值的指针

// 初始化行为不同
// make: 分配内存并初始化底层数据结构，使其可用
// new: 只分配内存并设为零值，不做初始化

package main

import "fmt"

func main() {
	// 使用make创建切片、map和channel
	slice := make([]int, 3)   // 创建长度为3的切片
	m := make(map[string]int) // 创建map
	ch := make(chan int, 2)   // 创建带缓冲的channel
	fmt.Println(slice, m, ch)

	// 使用new创建各种类型
	ptr := new(int)   // 创建指向int零值的指针
	fmt.Println(*ptr) // 输出0

	// 对比make和new创建切片的区别
	s1 := make([]int, 3) // 创建初始化的切片，可直接使用
	s2 := new([]int)     // 创建指向nil切片的指针，*s2是空切片
	fmt.Println(s1, *s2) // 输出[0 0 0] []

	// *s2需要先append才能使用
	*s2 = append(*s2, 1, 2, 3)
	fmt.Println(*s2) // 输出[1 2 3]

}
